package day8.Exer;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;

/* 常用图片的格式可以通过读取文件头部分获得：常用图片的格式可以通过读取文件头部分获得(16进制)：
（1）JPEG
- 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)

（3）PNG
- 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A
（4）GIF
- 文件头标识 (6 bytes)   47 49 46 38 39(37) 61
（5）BMP
- 文件头标识 (2 bytes)   42 4D，字符即：        B  M
输入一个文件名，判断其真正格式和其文件类型是否匹配（防止直接给文件改名，比如把一个jpg改成bmp或者把一个rar改成jpg）
*/
public class Exer10 {
    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        byte[] arr1 = {(byte)Integer.parseInt("ff",16), (byte)Integer.parseInt("d8",16)};
        byte[] arr2 = {(byte)Integer.parseInt("89",16), (byte)Integer.parseInt("50",16), (byte)Integer.parseInt("4e",16), (byte)Integer.parseInt("47",16), (byte)Integer.parseInt("0d",16), (byte)Integer.parseInt("0a",16), (byte)Integer.parseInt("1a",16), (byte)Integer.parseInt("0a",16)};
        byte[] arr3 = {(byte)Integer.parseInt("47",16), (byte)Integer.parseInt("49",16), (byte)Integer.parseInt("46",16), (byte)Integer.parseInt("38",16), (byte)Integer.parseInt("39",16), (byte)Integer.parseInt("61",16), (byte)Integer.parseInt("1a",16)};
        byte[] arr4 = {(byte)Integer.parseInt("47",16), (byte)Integer.parseInt("49",16), (byte)Integer.parseInt("46",16), (byte)Integer.parseInt("38",16), (byte)Integer.parseInt("37",16), (byte)Integer.parseInt("61",16), (byte)Integer.parseInt("1a",16)};
        byte[] arr5 = {(byte)Integer.parseInt("42",16), (byte)Integer.parseInt("4d",16)};
        Map<byte[], String> file = new HashMap<>();
        file.put(arr1, "JPEG");
        file.put(arr2, "PNG");
        file.put(arr3, "GIF");
        file.put(arr4, "GIF");
        file.put(arr5, "BMP");
            System.out.println("请输入文件名");
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(in.next());
                    byte[] b1 = new byte[10];
                    String str=new String(b1,0,b1.length);
                    byte[]a1=str.substring(0,3).getBytes();
                    byte[]a2=str.substring(0,7).getBytes();
                    byte[]a3=str.substring(0,9).getBytes();
                    List<byte[]>comp=new ArrayList<>();
                    comp.add(a1);
                    comp.add(a2);
                    comp.add(a3);
                    int i;
                    for(i=0;i<comp.size();i++){
                        if(file.containsKey(comp.get(i))){
                            System.out.println("文件类型为："+file.get(comp.get(i)));
                            return;
                        }
                    }if(i==comp.size()){
                        System.out.println("文件类型不存在");
                    }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(fis!=null){
                    fis.close();
                }
            }

    }
}
